// Original Mousepad, I believe
#ifdef _DEFINE_VARS

enum {DLLNO_GAME=0, DLLNO_WAR3};

#define OFFGAME  0x6F000000

#define DLLOFFSET(a1,b1) ((DLLNO_##a1)|((b1)<<8))
#define FUNCPTR(d1,v1,t1,t2,o1)	typedef t1 d1##_##v1##_t t2; d1##_##v1##_t *d1##_##v1 = (d1##_##v1##_t *)DLLOFFSET(d1,o1);
#define VARPTR(d1,v1,t1,o1)		typedef t1 d1##_##v1##_t;    d1##_##v1##_t *p_##d1##_##v1 = (d1##_##v1##_t *)DLLOFFSET(d1,o1);
#define ASMPTR(d1,v1,o1)			DWORD d1##_##v1 = DLLOFFSET(d1,o1);

#else

#define FUNCPTR(d1,v1,t1,t2,o1)	typedef t1 d1##_##v1##_t t2; extern d1##_##v1##_t *d1##_##v1;
#define VARPTR(d1,v1,t1,o1)		typedef t1 d1##_##v1##_t;    extern d1##_##v1##_t *p_##d1##_##v1;
#define ASMPTR(d1,v1,o1)		extern DWORD d1##_##v1;

#endif

#define _WC3PTRS_START	GAME_PrintChat

FUNCPTR(GAME, PrintChat, VOID __fastcall, (DWORD PtrList, DWORD _1, DWORD dwPlayerSlot, CHAR* pszText, DWORD dwPrintType, DWORD dwUnknownFlag), 0x2FA900) // Updated
FUNCPTR(GAME, Print, VOID __fastcall, (DWORD PtrList, DWORD _EDX, CHAR* pText, DWORD* pUnk, DWORD dwChatFlag, DWORD _1), 0x5F4A30) // Updated
FUNCPTR(GAME, GetPtrList, DWORD __fastcall, (VOID), 0x5EAF40) // Updated
FUNCPTR(GAME, GetPlayerName, CHAR* __fastcall, (DWORD dwSlot), 0x2F8410) // Updated
FUNCPTR(GAME, SetText, VOID __fastcall, (DWORD PtrList, DWORD _1, CHAR* pText), 0x5FCA90) // Updated
FUNCPTR(GAME, GetPlayerInfo, PlayerInfo* __fastcall, (GameInfo* GameInfo, DWORD _1, DWORD dwSlot),0x3A0560) // Updated
FUNCPTR(GAME, GetPlayerStat, DWORD __fastcall, (DWORD PointerToStat), 0x4634E0) // Updated
FUNCPTR(GAME, GetUnitName, CHAR* __fastcall,(DWORD dwClassId), 0x32D060) // Updated
FUNCPTR(GAME, PingMinimap, VOID __cdecl, (float* fX, float* fY, DWORD* pdwDuration), 0x3AEE10) // Updated
FUNCPTR(GAME, ClearSelection, VOID __cdecl, (VOID), 0x3B5FC0) // Updated
FUNCPTR(GAME, DoUnitCmd, VOID __fastcall, (DWORD dwPtr, DWORD _EDX, DWORD _1, DWORD dwClassId, DWORD _86000001, DWORD _2, DWORD _3, DWORD _4), 0x37B830) // Updated
FUNCPTR(GAME, ClickUnit, VOID __fastcall, (DWORD dwPtr, DWORD _EDX, Unit* pUnit, DWORD _1, DWORD _2, DWORD _3), 0x380B20) // Updated
FUNCPTR(GAME, FillUnitCoords, VOID __fastcall, (UnitInfo* pInfo, DWORD _EDX, UnitCoords* pCoords), 0x464710) // Updated
FUNCPTR(GAME, GetItemInUnitSlot, Item* __fastcall,(Unit * pUnit, DWORD _1, DWORD dwSlot),0x26E0E0) // Updated
FUNCPTR(GAME, DoEvent, BOOL __stdcall, (Unit* pTargetUnit, Event* pEvent), 0x380470) // Updated - Using this to control the current selected Unit(s)
FUNCPTR(GAME, GetPlayer, Player* __fastcall,(GameInfo* pGameInfo, DWORD _EDX, DWORD dwPlayerSlot), 0x3A0560) // Updated
FUNCPTR(GAME, FogEnable, VOID __cdecl,(BOOL bSetTo), 0x3B5700)
FUNCPTR(GAME, FogMaskEnable, VOID __cdecl,(BOOL bSetTo), 0x3B5730)
FUNCPTR(GAME, GetUnitAutomapPos, VOID __fastcall, (DWORD dwPtr, DWORD _EDX, POINT* lpPoint), 0x4647D0)
FUNCPTR(GAME, SendPacket, VOID __fastcall, (Packet* pPacket, DWORD dwZero), 0x53DCB0)
FUNCPTR(GAME, GetSelectedUnits, Unit** __fastcall, (DWORD dwPlayerPtrList, DWORD _EDX, SelectUnitStruct* SelectStruct), 0x412940)
FUNCPTR(GAME, GetLumber, DWORD __fastcall, (PlayerInfo* pInfo), 0x33FEC0)
FUNCPTR(GAME, GetGold, DWORD __fastcall, (PlayerInfo* pInfo), 0x33FEA0)
FUNCPTR(GAME, GetMaxSupply, DWORD __fastcall, (PlayerInfo* pInfo), 0x4002A0)
FUNCPTR(GAME, GetMinSupply, DWORD __fastcall, (PlayerInfo* pInfo), 0x400020)

FUNCPTR(GAME, CreateMultiboard, DWORD __fastcall, (VOID), 0x3CB0F0)
FUNCPTR(GAME, DestroyMultiboard, VOID __cdecl, (DWORD dwId), 0x3C4CE0)
FUNCPTR(GAME, GetMultiboard, Multiboard* __fastcall, (DWORD dwId), 0x3B9BB0)
FUNCPTR(GAME, SetMultiboardRows, VOID __cdecl, (DWORD dwId, DWORD dwRows), 0x3C4EA0)
FUNCPTR(GAME, SetMultiboardColumns, VOID __cdecl, (DWORD dwId, DWORD dwColumns), 0x3C4E80)
FUNCPTR(GAME, SetMultiboardTitleColor, VOID __fastcall, (Multiboard* pMultiboard, DWORD _EDX, DWORD dwColor), 0x3D70A0)
FUNCPTR(GAME, SetMultiboardTitle, VOID __fastcall, (Multiboard* pMultiboard, DWORD _EDX, CHAR* szTitle), 0x3D7070)
FUNCPTR(GAME, SetMultiboardMinimized, VOID __fastcall, (Multiboard* pMultiboard, DWORD _EDX, DWORD dwMinimized), 0x3D7040)
FUNCPTR(GAME, IsMultiboardDisplayed, BOOL _cdecl, (DWORD dwId), 0x3C4D20)
FUNCPTR(GAME, IsMultiboardMinimized, BOOL _cdecl, (DWORD dwId), 0x3C4D60)
FUNCPTR(GAME, ClearMultiboard, VOID _cdecl, (DWORD dwId), 0x3C4D80)
FUNCPTR(GAME, GetMultiboardTitleText, CHAR* __fastcall, (Multiboard* pMultiboard), 0x3C4DE0)
FUNCPTR(GAME, GetMultiboardItemId, DWORD __cdecl, (DWORD dwId, DWORD dwColumn, DWORD dwRow), 0x3CB1F0)
FUNCPTR(GAME, GetMultiboardRowCount, DWORD __cdecl, (DWORD dwId), 0x3C4E40)
FUNCPTR(GAME, GetMultiboardColumnCount, DWORD __cdecl, (DWORD dwId), 0x3C4E60)
FUNCPTR(GAME, ReleaseMultiboardItemId, VOID __cdecl, (DWORD dwId), 0x3C4FE0)
FUNCPTR(GAME, GetMultiboardItem, MultiboardItem* __fastcall, (DWORD dwId), 0x3B9CD0)
FUNCPTR(GAME, SetMultiboardItemIcon, VOID __fastcall, (MultiboardItem* pItem, DWORD _EDX, CHAR* szPath), 0x3DE420)
FUNCPTR(GAME, SetMultiboardItemValue, VOID __fastcall, (MultiboardItem* pItem, DWORD _EDX, CHAR* szString), 0x3DE390)
FUNCPTR(GAME, SetMultiboardItemWidth, VOID __cdecl, (DWORD dwItemId, float* fWidth), 0x3C5090)
FUNCPTR(GAME, SetMultiboardItemColor, VOID __fastcall, (MultiboardItem* pItem, DWORD _EDX, DWORD dwColor), 0x3DE3C0)

FUNCPTR(GAME, DisplayMultiboard, VOID __cdecl, (DWORD dwId, DWORD dwDisplay), 0x3C4D00)
FUNCPTR(GAME, SendCommandXY, VOID __stdcall, (DWORD dwCommand, DWORD _1, float fX, float fY, DWORD _2, DWORD _3, DWORD _4), 0x339210) 
FUNCPTR(GAME, SendCommandUnit, VOID __stdcall, (DWORD dwCommand, DWORD _1, Unit* pUnit, DWORD _2, DWORD _3), 0x339190)
FUNCPTR(GAME, BuildXY, VOID __fastcall, (DWORD dwBuildClassId, DWORD _EDX, float* fX, float* fY, DWORD _1 /*always 4?*/), 0x2CAE60)

ASMPTR(GAME, GameInput_I, 0x80A8AB)
ASMPTR(GAME, GameInput_II, 0x2FBB87)
ASMPTR(GAME, GetUnitArray_I, 0x2FFB90) // Updated
ASMPTR(GAME, GetUnitArray_II,0x39AAF0) // Updated
ASMPTR(GAME, UnitAlertJump, 0x29EE47) // Updated
ASMPTR(GAME, GetSelectedUnit_I, 0x4128A0) // Updated
ASMPTR(GAME, 6F713000, 0x92F890) // Updated
ASMPTR(GAME, glDraw_I, 0xA990F8)
ASMPTR(GAME, TlsSet_I, 0x4B3810)
ASMPTR(GAME, TlsGet_I, 0x6C9050)
ASMPTR(GAME, TlsGet_II, 0xABB54C)
ASMPTR(GAME, CmdUnit_I, 0x37B84B)
ASMPTR(GAME, GetPlayerStartLocX_I, 0x3BA49E)
ASMPTR(GAME, GetPlayerStartLocY_I, 0x3BA4CE)
ASMPTR(GAME, SetPlayerResource_I, 0x407225)
ASMPTR(GAME, UnitSetClassId_I, 0x2AD6C0)
ASMPTR(GAME, GetUnitAnimationid_I, 0x4C7C40)

VARPTR(GAME, TlsIndex, DWORD, 0xAA45E4)
VARPTR(GAME, MapName, CHAR*, 0xA9B1C8)
VARPTR(GAME, MapBaseValue, float, 0x928F80+4)
VARPTR(GAME, ChatBoxPtr, DWORD, 0xABB06C)
VARPTR(GAME, GlobalMapData,MapData*, 0xAA2C1C)
VARPTR(GAME, GameInfos, GameInfo*, 0xAA2FFC)

#define _WC3PTRS_END	p_GAME_GameInfos

#undef FUNCPTR
#undef VARPTR
#undef ASMPTR